Houdiniメモ : VEX : 円弧を自動でx軸方向に向ける
■はじめに
円弧をx軸方向に自動で向ける方法の紹介
https://gyazo.com/97fe890420d0fe9d7533e23addb2e163
■考え方
円弧の全ポイント座標の平均値をとり、これをx軸の方向へ向けるような行列 $ M を求めます。
すべてのポイントに対して上記の行列 $ Mを演算することで、円弧の中心軸がx軸へ向きます。
■VEXコード
code:VEX(c)
// ジオメトリ内の全ポイントの座標を合計
vector total = {0, 0, 0};
for(int i = 0; i < @numpt; i++){
total += point(geoself(), "P", i);
}
// 重心(座標の平均)を求める
vector average = total / @numpt;
// 重心をz軸方向へ向けるようなマトリックスを求める
matrix3 m = dihedral(average, {1, 0, 0});
// 各ポイントの座標を回転させる
for(int i = 0; i < @numpt; i++){
vector p = point(geoself(), "P", i);
p *= m;
setpointattrib(geoself(), "P", i, p);
}
]
■使用例
SideFX Labs の Disc Generatorで作った円弧をx軸方向へ向けるといったこともできます。
https://gyazo.com/e8f23ee873b04dbb9781fa1db588d166
https://gyazo.com/8bf01502dca7064cd775e3cd543c1388
※AttributeWrangleのRun Over = Primitivesに設定しておきましょう。(VEXが1回だけ実行されるようになります。)
(Run Over = Pointだと、すべてのポイントに対してVEXが実行されるので重くなります。)